package com.tool.cn.use.search.search;

import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.tool.cn.use.search.map.EqualContainsMap;
import com.tool.cn.use.search.type.VagueType;

/**
 * 
 * @author wangzonghui
 * @date 2022年4月26日 上午11:07:12 
 * @Description 模糊查询入口
 */
public class VagueSearch {
	
	private Map<VagueType,EqualContainsMap> dataMap=new Hashtable<>();
	
	private Map<String,VagueType> recordMap=new Hashtable<>();
	
	public Map<VagueType,EqualContainsMap> getData(){
		return dataMap;
	}
	
	/**
	 * 查询数据
	 * 	@param type 查询类型
	 * @param equal 精确信息
	 * @param ip IP地址
	 * @return
	 */
	public List<String> search(VagueType type,String equal,String ip){
		if(dataMap.containsKey(type)) {
			return dataMap.get(type).search(equal,ip);
		}
		return new ArrayList<>();
	}
	
	/**
	 * 添加数据
	 * @param type 查询类型
	 * @param equal 精确信息
	 * @param ipMask ip掩码位
	 * @param data 数据
	 * @return
	 */
	public boolean addData(VagueType type,String equal,String ipMask,String data) {
		EqualContainsMap equalContainsMap;
		if(dataMap.containsKey(type)) {
			equalContainsMap=dataMap.get(type);
		}else {
			equalContainsMap=new EqualContainsMap();
		}
		equalContainsMap.add(equal, ipMask, data);
		dataMap.put(type, equalContainsMap);
		
		recordMap.put(data, type);
		return true;
	}
	
	/**
	 * 删除数据
	 * @param type 类型
	 * @param equal 精确信息
	 * @param ipMask ip掩码位
	 * @param data 数据
	 * @return
	 */
	public boolean removeData(VagueType type,String equal,String ipMask,String data) {
		if(dataMap.containsKey(type)) {
			 if(!dataMap.get(type).remove(equal, ipMask, data)) {
				 return false;
			 }
			 recordMap.remove(data);
		}
		return true;
	}
	
	/**
	 * 删除数据
	 * @param type 类型
	 * @param data 数据
	 * @return
	 */
	public boolean removeData(VagueType type,String data) {
		if(recordMap.containsKey(data)) {
			if(!dataMap.get(type).remove(data)) {
				return false;
			}
			recordMap.remove(data);
		}
		return true;
	}

	/**
	 * 删除数据
	 * @param data 数据
	 * @return
	 */
	public boolean removeData(String data) {
		if(recordMap.containsKey(data)) {
			return removeData(recordMap.get(data), data);
		}
		return true;
	}
	
	/**
	 * 获取所有值
	 * @return
	 */
	public Set<String> getValue(){
		return recordMap.keySet();
	}

}
